class NewsController {
	
	def index = { redirect(action:rank,params:params) }
	
    // 얼마에 한 번씩 새로운 정보를 NATE 뉴스에서 가져와 DB를 갱신할 것인가? (5분)
	static int updateTime = 1000 * 60 * 5
	
	def rank = { 
    	String section
		String date
		
		if(params.sc) {
			section = params.sc
		} else {
			section = 'all'
		}
    	
    	if(params.date) {
    		date = params.date
    	} else {
    		date = new Date().format('yyyyMMdd').toString()
    	}
    	
    	Date dateParam = Date.parse('yyyyMMdd', date)
    	def rankInfo = RankInfo.findBySectionAndDateCreatedBetween(section, new Date(dateParam.time), new Date((dateParam+1).time))
		if(!rankInfo) {
			rankInfo = RankInfo.parseRankInfo(section, date)
			rankInfo.save()
		} else if(rankInfo && new Date().time - rankInfo.dateViewed.time > updateTime) {
			RankInfo.withTransaction {
				rankInfo.delete()
				rankInfo = RankInfo.parseRankInfo(section, date)
				rankInfo.save()
			}
		}
    	
		def sortedListOfArticleRank = rankInfo.listOfArticleRank.sort{ it.rank }
    	
    	[ section:section, date:date, listOfArticleRank:sortedListOfArticleRank, ]
    }
    
    def article = {
    	def article = Article.findByArticleId(params.id)
		def listOfBeple
		
		if(article && new Date().time - article.dateViewed.time > updateTime) {
			// 해당 articleId의 기사는 있지만 updateTime이 지났다면
			// 있던 기사를 삭제하고 Nate 뉴스에서 기사와 베플을 다시 가져와 DB에 저장
			Article.withTransaction {
				article.delete()
			
				String articleLink = "http://news.nate.com/view/${params.id}"
		    	article = Article.parseArticle(articleLink)
				listOfBeple = Reply.parseBestReplies(articleLink)
				article.listOfBeple = listOfBeple
				
				article.save()
			}
		} else if(article) {
			// updateTime이 지나지 않은 해당 articleId의 기사가 있으면 그걸 이용하고
			listOfBeple = article.listOfBeple.sort{ it.countOfGood }.reverse()
		} else {
			// DB에 해당 기사가 없으면 Nate 뉴스에서 기사와 베플을 가져와 DB에 저장
			String articleLink = "http://news.nate.com/view/${params.id}"
	    	article = Article.parseArticle(articleLink)
			listOfBeple = Reply.parseBestReplies(articleLink)
			article.listOfBeple = listOfBeple
			
			article.save()
		}
    	
		[ article:article, listOfBeple:listOfBeple, ]
    }
}
